+2004-02-19 Alexander Larsson <alexl@redhat.com>
+
+ * gtk/gtkfilechooser.c: (gtk_file_chooser_class_init):
+ * gtk/gtkfilechooserutils.c:
+ * gtk/gtkfilechooserutils.h:
+ * gtk/gtkfilechooserwidget.c:
+ Remove old file-system property.
+ Add new file-system-backend string property
+
+ * gtk/gtkfilechooserdefault.[ch]:
+ Handle the file-system-backend property
+
+ * gtk/gtkfilechooserdialog.[ch]:
+ (gtk_file_chooser_dialog_new_with_backend):
+ Remove old file-system property.
+ Add new file-system-backend string property
+ Add new function gtk_file_chooser_dialog_new_with_backend
+
+ * gtk/gtkfilesystem.c:
+ * gtk/gtkfilesystem.h:
+ Add filesystem module support.
+
2004-02-18 Federico Mena Quintero <federico@ximian.com>
* gtk/gtkfilechooserdefault.c (shortcuts_tree_create): Renamed
+2004-02-19 Alexander Larsson <alexl@redhat.com>
+
+ * gtk/gtkfilechooser.c: (gtk_file_chooser_class_init):
+ * gtk/gtkfilechooserutils.c:
+ * gtk/gtkfilechooserutils.h:
+ * gtk/gtkfilechooserwidget.c:
+ Remove old file-system property.
+ Add new file-system-backend string property
+
+ * gtk/gtkfilechooserdefault.[ch]:
+ Handle the file-system-backend property
+
+ * gtk/gtkfilechooserdialog.[ch]:
+ (gtk_file_chooser_dialog_new_with_backend):
+ Remove old file-system property.
+ Add new file-system-backend string property
+ Add new function gtk_file_chooser_dialog_new_with_backend
+
+ * gtk/gtkfilesystem.c:
+ * gtk/gtkfilesystem.h:
+ Add filesystem module support.
+
2004-02-18 Federico Mena Quintero <federico@ximian.com>
* gtk/gtkfilechooserdefault.c (shortcuts_tree_create): Renamed
+2004-02-19 Alexander Larsson <alexl@redhat.com>
+
+ * gtk/gtkfilechooser.c: (gtk_file_chooser_class_init):
+ * gtk/gtkfilechooserutils.c:
+ * gtk/gtkfilechooserutils.h:
+ * gtk/gtkfilechooserwidget.c:
+ Remove old file-system property.
+ Add new file-system-backend string property
+
+ * gtk/gtkfilechooserdefault.[ch]:
+ Handle the file-system-backend property
+
+ * gtk/gtkfilechooserdialog.[ch]:
+ (gtk_file_chooser_dialog_new_with_backend):
+ Remove old file-system property.
+ Add new file-system-backend string property
+ Add new function gtk_file_chooser_dialog_new_with_backend
+
+ * gtk/gtkfilesystem.c:
+ * gtk/gtkfilesystem.h:
+ Add filesystem module support.
+
2004-02-18 Federico Mena Quintero <federico@ximian.com>
* gtk/gtkfilechooserdefault.c (shortcuts_tree_create): Renamed
+2004-02-19 Alexander Larsson <alexl@redhat.com>
+
+ * gtk/gtkfilechooser.c: (gtk_file_chooser_class_init):
+ * gtk/gtkfilechooserutils.c:
+ * gtk/gtkfilechooserutils.h:
+ * gtk/gtkfilechooserwidget.c:
+ Remove old file-system property.
+ Add new file-system-backend string property
+
+ * gtk/gtkfilechooserdefault.[ch]:
+ Handle the file-system-backend property
+
+ * gtk/gtkfilechooserdialog.[ch]:
+ (gtk_file_chooser_dialog_new_with_backend):
+ Remove old file-system property.
+ Add new file-system-backend string property
+ Add new function gtk_file_chooser_dialog_new_with_backend
+
+ * gtk/gtkfilesystem.c:
+ * gtk/gtkfilesystem.h:
+ Add filesystem module support.
+
2004-02-18 Federico Mena Quintero <federico@ximian.com>
* gtk/gtkfilechooserdefault.c (shortcuts_tree_create): Renamed
+2004-02-19 Alexander Larsson <alexl@redhat.com>
+
+ * gtk/gtkfilechooser.c: (gtk_file_chooser_class_init):
+ * gtk/gtkfilechooserutils.c:
+ * gtk/gtkfilechooserutils.h:
+ * gtk/gtkfilechooserwidget.c:
+ Remove old file-system property.
+ Add new file-system-backend string property
+
+ * gtk/gtkfilechooserdefault.[ch]:
+ Handle the file-system-backend property
+
+ * gtk/gtkfilechooserdialog.[ch]:
+ (gtk_file_chooser_dialog_new_with_backend):
+ Remove old file-system property.
+ Add new file-system-backend string property
+ Add new function gtk_file_chooser_dialog_new_with_backend
+
+ * gtk/gtkfilesystem.c:
+ * gtk/gtkfilesystem.h:
+ Add filesystem module support.
+
2004-02-18 Federico Mena Quintero <federico@ximian.com>
* gtk/gtkfilechooserdefault.c (shortcuts_tree_create): Renamed
GTK_FILE_CHOOSER_ACTION_OPEN,
G_PARAM_READWRITE));
g_object_interface_install_property (g_iface,
- g_param_spec_object ("file-system",
- P_("File System"),
- P_("File system object to use"),
- GTK_TYPE_FILE_SYSTEM,
+ g_param_spec_string ("file-system-backend",
+ P_("File System Backend"),
+ P_("Name of file system backend to use"),
+ NULL,
G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
g_object_interface_install_property (g_iface,
g_param_spec_object ("filter",
#include "gtktypebuiltins.h"
#include "gtkvbox.h"
+#if defined (G_OS_UNIX)
+#include "gtkfilesystemunix.h"
+#elif defined (G_OS_WIN32)
+#include "gtkfilesystemwin32.h"
+#endif
+
#include <string.h>
#include <time.h>
check_preview_change (impl);
}
+static void
+set_file_system_backend (GtkFileChooserDefault *impl,
+ const char *backend)
+{
+ if (impl->file_system)
+ {
+ g_signal_handler_disconnect (impl->file_system, impl->volumes_changed_id);
+ impl->volumes_changed_id = 0;
+ g_signal_handler_disconnect (impl->file_system, impl->bookmarks_changed_id);
+ impl->bookmarks_changed_id = 0;
+ g_object_unref (impl->file_system);
+ }
+
+ impl->file_system = NULL;
+ if (backend)
+ impl->file_system = _gtk_file_system_create (backend);
+
+ if (!impl->file_system)
+ {
+#if defined (G_OS_UNIX)
+ impl->file_system = gtk_file_system_unix_new ();
+#elif defined (G_OS_WIN32)
+ impl->file_system = gtk_file_system_win32_new ();
+#else
+#error "No default filesystem implementation on the platform"
+#endif
+ }
+
+ if (impl->file_system)
+ {
+ impl->volumes_changed_id = g_signal_connect (impl->file_system, "volumes-changed",
+ G_CALLBACK (volumes_changed_cb),
+ impl);
+ impl->bookmarks_changed_id = g_signal_connect (impl->file_system, "bookmarks-changed",
+ G_CALLBACK (bookmarks_changed_cb),
+ impl);
+ }
+}
+
static void
gtk_file_chooser_default_set_property (GObject *object,
guint prop_id,
gtk_widget_hide (impl->new_folder_button);
break;
- case GTK_FILE_CHOOSER_PROP_FILE_SYSTEM:
- {
- GtkFileSystem *file_system = g_value_get_object (value);
- if (impl->file_system != file_system)
- {
- if (impl->file_system)
- {
- g_signal_handler_disconnect (impl->file_system, impl->volumes_changed_id);
- impl->volumes_changed_id = 0;
- g_signal_handler_disconnect (impl->file_system, impl->bookmarks_changed_id);
- impl->bookmarks_changed_id = 0;
- g_object_unref (impl->file_system);
- }
- impl->file_system = file_system;
- if (impl->file_system)
- {
- g_object_ref (impl->file_system);
- impl->volumes_changed_id = g_signal_connect (impl->file_system, "volumes-changed",
- G_CALLBACK (volumes_changed_cb),
- impl);
- impl->bookmarks_changed_id = g_signal_connect (impl->file_system, "bookmarks-changed",
- G_CALLBACK (bookmarks_changed_cb),
- impl);
- }
- }
- }
+ case GTK_FILE_CHOOSER_PROP_FILE_SYSTEM_BACKEND:
+ set_file_system_backend (impl, g_value_get_string (value));
break;
case GTK_FILE_CHOOSER_PROP_FILTER:
set_current_filter (impl, g_value_get_object (value));
}
GtkWidget *
-_gtk_file_chooser_default_new (GtkFileSystem *file_system)
+_gtk_file_chooser_default_new (const char *file_system)
{
return g_object_new (GTK_TYPE_FILE_CHOOSER_DEFAULT,
- "file-system", file_system,
+ "file-system-backend", file_system,
NULL);
}
typedef struct _GtkFileChooserDefault GtkFileChooserDefault;
GType _gtk_file_chooser_default_get_type (void);
-GtkWidget *_gtk_file_chooser_default_new (GtkFileSystem *file_system);
+GtkWidget *_gtk_file_chooser_default_new (const char *file_system);
G_END_DECLS
{
GtkWidget *widget;
- GtkFileSystem *file_system;
+ char *file_system;
};
#define GTK_FILE_CHOOSER_DIALOG_GET_PRIVATE(o) (GTK_FILE_CHOOSER_DIALOG (o)->priv)
static void gtk_file_chooser_dialog_class_init (GtkFileChooserDialogClass *class);
static void gtk_file_chooser_dialog_init (GtkFileChooserDialog *dialog);
+static void gtk_file_chooser_dialog_finalize (GObject *object);
static GObject* gtk_file_chooser_dialog_constructor (GType type,
guint n_construct_properties,
gobject_class->constructor = gtk_file_chooser_dialog_constructor;
gobject_class->set_property = gtk_file_chooser_dialog_set_property;
gobject_class->get_property = gtk_file_chooser_dialog_get_property;
+ gobject_class->finalize = gtk_file_chooser_dialog_finalize;
widget_class->realize = gtk_file_chooser_dialog_realize;
widget_class->style_set = gtk_file_chooser_dialog_style_set;
gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE);
}
+static void
+gtk_file_chooser_dialog_finalize (GObject *object)
+{
+ GtkFileChooserDialog *dialog = GTK_FILE_CHOOSER_DIALOG (object);
+
+ g_free (dialog->priv->file_system);
+}
+
/* Callback used when the user activates a file in the file chooser widget */
static void
file_chooser_widget_file_activated (GtkFileChooser *chooser,
if (priv->file_system)
priv->widget = g_object_new (GTK_TYPE_FILE_CHOOSER_WIDGET,
- "file-system", priv->file_system,
+ "file-system-backend", priv->file_system,
NULL);
else
priv->widget = g_object_new (GTK_TYPE_FILE_CHOOSER_WIDGET, NULL);
switch (prop_id)
{
- case GTK_FILE_CHOOSER_PROP_FILE_SYSTEM:
- {
- GtkFileSystem *file_system = g_value_get_object (value);
- if (priv->file_system != file_system)
- {
- if (priv->file_system)
- g_object_unref (priv->file_system);
- priv->file_system = file_system;
- if (priv->file_system)
- g_object_ref (priv->file_system);
- }
- }
+ case GTK_FILE_CHOOSER_PROP_FILE_SYSTEM_BACKEND:
+ g_free (priv->file_system);
+ priv->file_system = g_value_dup_string (value);
break;
default:
g_object_set_property (G_OBJECT (priv->widget), pspec->name, value);
set_default_size (GTK_FILE_CHOOSER_DIALOG (widget));
}
+static GtkWidget *
+gtk_file_chooser_dialog_new_valist (const gchar *title,
+ GtkWindow *parent,
+ GtkFileChooserAction action,
+ const gchar *backend,
+ const gchar *first_button_text,
+ va_list varargs)
+{
+ GtkWidget *result;
+ const char *button_text = first_button_text;
+ gint response_id;
+
+ result = g_object_new (GTK_TYPE_FILE_CHOOSER_DIALOG,
+ "title", title,
+ "action", action,
+ "file-system-backend", backend,
+ NULL);
+
+ if (parent)
+ gtk_window_set_transient_for (GTK_WINDOW (result), parent);
+
+ while (button_text)
+ {
+ response_id = va_arg (varargs, gint);
+ gtk_dialog_add_button (GTK_DIALOG (result), button_text, response_id);
+ button_text = va_arg (varargs, const gchar *);
+ }
+
+ return result;
+}
+
/**
* gtk_file_chooser_dialog_new:
* @title: Title of the dialog, or %NULL
{
GtkWidget *result;
va_list varargs;
- const char *button_text = first_button_text;
- gint response_id;
-
- result = g_object_new (GTK_TYPE_FILE_CHOOSER_DIALOG,
- "title", title,
- "action", action,
- NULL);
-
- if (parent)
- gtk_window_set_transient_for (GTK_WINDOW (result), parent);
-
+
va_start (varargs, first_button_text);
+ result = gtk_file_chooser_dialog_new_valist (title, parent, action,
+ NULL, first_button_text,
+ varargs);
+ va_end (varargs);
- while (button_text)
- {
- response_id = va_arg (varargs, gint);
- gtk_dialog_add_button (GTK_DIALOG (result), button_text, response_id);
- button_text = va_arg (varargs, const gchar *);
- }
+ return result;
+}
+/**
+ * gtk_file_chooser_dialog_new_with_backend:
+ * @title: Title of the dialog, or %NULL
+ * @parent: Transient parent of the dialog, or %NULL
+ * @backend: The name of the specific filesystem backend to use.
+ * @action: Open or save mode for the dialog
+ * @first_button_text: stock ID or text to go in the first button, or %NULL
+ * @Varargs: response ID for the first button, then additional (button, id) pairs, ending with %NULL
+ *
+ * Creates a new #GtkFileChooserDialog with a specified backend. This is
+ * especially useful if you use gtk_file_chooser_set_local_only() to allow
+ * non-local files and you use a more expressive vfs, such as gnome-vfs,
+ * to load files.
+ *
+ * Return value: a new #GtkFileChooserDialog
+ *
+ * Since: 2.4
+ **/
+GtkWidget *
+gtk_file_chooser_dialog_new_with_backend (const gchar *title,
+ GtkWindow *parent,
+ GtkFileChooserAction action,
+ const gchar *backend,
+ const gchar *first_button_text,
+ ...)
+{
+ GtkWidget *result;
+ va_list varargs;
+
+ va_start (varargs, first_button_text);
+ result = gtk_file_chooser_dialog_new_valist (title, parent, action,
+ backend, first_button_text,
+ varargs);
va_end (varargs);
return result;
GtkFileChooserDialogPrivate *priv;
};
-GType gtk_file_chooser_dialog_get_type (void);
-GtkWidget *gtk_file_chooser_dialog_new (const gchar *title,
- GtkWindow *parent,
- GtkFileChooserAction action,
- const gchar *first_button_text,
- ...);
+GType gtk_file_chooser_dialog_get_type (void);
+GtkWidget *gtk_file_chooser_dialog_new (const gchar *title,
+ GtkWindow *parent,
+ GtkFileChooserAction action,
+ const gchar *first_button_text,
+ ...);
+GtkWidget *gtk_file_chooser_dialog_new_with_backend (const gchar *title,
+ GtkWindow *parent,
+ GtkFileChooserAction action,
+ const gchar *backend,
+ const gchar *first_button_text,
+ ...);
G_END_DECLS
GTK_FILE_CHOOSER_PROP_EXTRA_WIDGET,
"extra-widget");
g_object_class_override_property (klass,
- GTK_FILE_CHOOSER_PROP_FILE_SYSTEM,
- "file-system");
+ GTK_FILE_CHOOSER_PROP_FILE_SYSTEM_BACKEND,
+ "file-system-backend");
g_object_class_override_property (klass,
GTK_FILE_CHOOSER_PROP_FILTER,
"filter");
typedef enum {
GTK_FILE_CHOOSER_PROP_FIRST = 0x1000,
GTK_FILE_CHOOSER_PROP_ACTION = GTK_FILE_CHOOSER_PROP_FIRST,
- GTK_FILE_CHOOSER_PROP_FILE_SYSTEM,
+ GTK_FILE_CHOOSER_PROP_FILE_SYSTEM_BACKEND,
GTK_FILE_CHOOSER_PROP_FILTER,
GTK_FILE_CHOOSER_PROP_FOLDER_MODE,
GTK_FILE_CHOOSER_PROP_LOCAL_ONLY,
#include "gtkfilechooserutils.h"
#include "gtktypebuiltins.h"
-#if defined (G_OS_UNIX)
-#include "gtkfilesystemunix.h"
-#elif defined (G_OS_WIN32)
-#include "gtkfilesystemwin32.h"
-#endif
-
struct _GtkFileChooserWidgetPrivate
{
GtkWidget *impl;
- GtkFileSystem *file_system;
+ char *file_system;
};
#define GTK_FILE_CHOOSER_WIDGET_GET_PRIVATE(o) (GTK_FILE_CHOOSER_WIDGET (o)->priv)
static void gtk_file_chooser_widget_class_init (GtkFileChooserWidgetClass *class);
static void gtk_file_chooser_widget_init (GtkFileChooserWidget *chooser_widget);
+static void gtk_file_chooser_widget_finalize (GObject *object);
static GObject* gtk_file_chooser_widget_constructor (GType type,
guint n_construct_properties,
gobject_class->constructor = gtk_file_chooser_widget_constructor;
gobject_class->set_property = gtk_file_chooser_widget_set_property;
gobject_class->get_property = gtk_file_chooser_widget_get_property;
+ gobject_class->finalize = gtk_file_chooser_widget_finalize;
_gtk_file_chooser_install_properties (gobject_class);
chooser_widget->priv = priv;
}
+static void
+gtk_file_chooser_widget_finalize (GObject *object)
+{
+ GtkFileChooserWidget *chooser = GTK_FILE_CHOOSER_WIDGET (object);
+
+ g_free (chooser->priv->file_system);
+}
+
static GObject*
gtk_file_chooser_widget_constructor (GType type,
guint n_construct_properties,
gtk_widget_push_composite_child ();
- if (!priv->file_system)
- {
-#if defined (G_OS_UNIX)
- priv->file_system = gtk_file_system_unix_new ();
-#elif defined (G_OS_WIN32)
- priv->file_system = gtk_file_system_win32_new ();
-#endif
- }
-
priv->impl = _gtk_file_chooser_default_new (priv->file_system);
+
gtk_box_pack_start (GTK_BOX (object), priv->impl, TRUE, TRUE, 0);
gtk_widget_show (priv->impl);
switch (prop_id)
{
- case GTK_FILE_CHOOSER_PROP_FILE_SYSTEM:
- {
- GtkFileSystem *file_system = g_value_get_object (value);
- if (priv->file_system != file_system)
- {
- if (priv->file_system)
- g_object_unref (priv->file_system);
- priv->file_system = file_system;
- if (priv->file_system)
- g_object_ref (priv->file_system);
- }
- }
+ case GTK_FILE_CHOOSER_PROP_FILE_SYSTEM_BACKEND:
+ g_free (priv->file_system);
+ priv->file_system = g_value_dup_string (value);
break;
default:
g_object_set_property (G_OBJECT (priv->impl), pspec->name, value);
* Boston, MA 02111-1307, USA.
*/
-
+#include <gmodule.h>
#include "gtkfilesystem.h"
#include "gtkicontheme.h"
+#include "gtkmain.h"
#include <string.h>
g_slist_free (paths);
}
+
+/*****************************************
+ * GtkFileSystem modules *
+ *****************************************/
+
+typedef struct _GtkFileSystemModule GtkFileSystemModule;
+typedef struct _GtkFileSystemModuleClass GtkFileSystemModuleClass;
+
+struct _GtkFileSystemModule
+{
+ GTypeModule parent_instance;
+
+ GModule *library;
+
+ void (*init) (GTypeModule *module);
+ void (*exit) (void);
+ GtkFileSystem * (*create) (void);
+
+ gchar *path;
+};
+
+struct _GtkFileSystemModuleClass
+{
+ GTypeModuleClass parent_class;
+};
+
+G_DEFINE_TYPE (GtkFileSystemModule, gtk_file_system_module, G_TYPE_TYPE_MODULE);
+#define GTK_TYPE_FILE_SYSTEM_MODULE (gtk_file_system_module_get_type ())
+#define GTK_FILE_SYSTEM_MODULE(module) (G_TYPE_CHECK_INSTANCE_CAST ((module), GTK_TYPE_FILE_SYSTEM_MODULE, GtkFileSystemModule))
+
+
+static GSList *loaded_file_systems;
+
+static gboolean
+gtk_file_system_module_load (GTypeModule *module)
+{
+ GtkFileSystemModule *fs_module = GTK_FILE_SYSTEM_MODULE (module);
+
+ fs_module->library = g_module_open (fs_module->path, 0);
+ if (!fs_module->library)
+ {
+ g_warning (g_module_error());
+ return FALSE;
+ }
+
+ /* extract symbols from the lib */
+ if (!g_module_symbol (fs_module->library, "fs_module_init",
+ (gpointer *)&fs_module->init) ||
+ !g_module_symbol (fs_module->library, "fs_module_exit",
+ (gpointer *)&fs_module->exit) ||
+ !g_module_symbol (fs_module->library, "fs_module_create",
+ (gpointer *)&fs_module->create))
+ {
+ g_warning (g_module_error());
+ g_module_close (fs_module->library);
+
+ return FALSE;
+ }
+
+ /* call the filesystems's init function to let it */
+ /* setup anything it needs to set up. */
+ fs_module->init (module);
+
+ return TRUE;
+}
+
+static void
+gtk_file_system_module_unload (GTypeModule *module)
+{
+ GtkFileSystemModule *fs_module = GTK_FILE_SYSTEM_MODULE (module);
+
+ fs_module->exit();
+
+ g_module_close (fs_module->library);
+ fs_module->library = NULL;
+
+ fs_module->init = NULL;
+ fs_module->exit = NULL;
+ fs_module->create = NULL;
+}
+
+/* This only will ever be called if an error occurs during
+ * initialization
+ */
+static void
+gtk_file_system_module_finalize (GObject *object)
+{
+ GtkFileSystemModule *module = GTK_FILE_SYSTEM_MODULE (object);
+
+ g_free (module->path);
+
+ G_OBJECT_CLASS (gtk_file_system_module_parent_class)->finalize (object);
+}
+
+static void
+gtk_file_system_module_class_init (GtkFileSystemModuleClass *class)
+{
+ GTypeModuleClass *module_class = G_TYPE_MODULE_CLASS (class);
+ GObjectClass *gobject_class = G_OBJECT_CLASS (class);
+
+ module_class->load = gtk_file_system_module_load;
+ module_class->unload = gtk_file_system_module_unload;
+
+ gobject_class->finalize = gtk_file_system_module_finalize;
+}
+
+static void
+gtk_file_system_module_init (GtkFileSystemModule *fs_module)
+{
+}
+
+
+static GtkFileSystem *
+_gtk_file_system_module_create (GtkFileSystemModule *fs_module)
+{
+ GtkFileSystem *fs;
+
+ if (g_type_module_use (G_TYPE_MODULE (fs_module)))
+ {
+ fs = fs_module->create ();
+ g_type_module_unuse (G_TYPE_MODULE (fs_module));
+ return fs;
+ }
+ return NULL;
+}
+
+
+GtkFileSystem *
+_gtk_file_system_create (const char *file_system_name)
+{
+ struct FileSystemInfo *file_system_info;
+ GSList *l;
+ char *module_path;
+ GtkFileSystemModule *fs_module;
+ GtkFileSystem *fs;
+
+ for (l = loaded_file_systems; l != NULL; l = l->next)
+ {
+ fs_module = l->data;
+
+ if (strcmp (G_TYPE_MODULE (fs_module)->name, file_system_name) == 0)
+ return _gtk_file_system_module_create (fs_module);
+ }
+
+ fs = NULL;
+ if (g_module_supported ())
+ {
+ module_path = _gtk_find_module (file_system_name, "filesystems");
+
+ if (module_path)
+ {
+ fs_module = g_object_new (GTK_TYPE_FILE_SYSTEM_MODULE, NULL);
+
+ g_type_module_set_name (G_TYPE_MODULE (fs_module), file_system_name);
+ fs_module->path = g_strdup (module_path);
+
+ loaded_file_systems = g_slist_prepend (loaded_file_systems,
+ fs_module);
+
+ fs = _gtk_file_system_module_create (fs_module);
+ }
+
+ g_free (module_path);
+ }
+
+ return fs;
+}
GSList *gtk_file_paths_copy (GSList *paths);
void gtk_file_paths_free (GSList *paths);
+/* GtkFileSystem modules support */
+
+GtkFileSystem *_gtk_file_system_create (const char *file_system_name);
+
G_END_DECLS
#endif /* __GTK_FILE_SYSTEM_H__ */